package com.lol .service;

import com.lol.mapper.EbProductMapper;
import com.lol.model.EbProduct;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.HashSet;
import java.util.Set;

@Service
public class ProductService {
    @Resource
    private EbProductMapper ebProductMapper;

    public EbProduct detail(int pid) {
        EbProduct ebProduct = ebProductMapper.selectById(pid);
        return ebProduct;
    }

    public void addCar(int epId, HttpServletRequest request) {
        //1.TODO 调用mapper获取商品对象
        EbProduct newProduct = ebProductMapper.selectById(epId);
        //2.TODO 创建购物车session
        HttpSession session = request.getSession();

        //3.TODO 得到集合 （1.创建 2.从session获取） list元素不唯一 Set元素唯一
        Set<EbProduct> set = null;
        //3.1先从购物车中获取袋子
        set = (Set<EbProduct>) session.getAttribute("car");
        if (set == null) {
            set = new HashSet<>();
        }
        //4.TODO 将商品放入集合----List去重问题
        //4.1判断set中是否存在新加入购物车的商品
        //lsit.add(newProduct);//导致同一个商品出现多次
        //标记法---->查找问题
        boolean flag = false;
        for (EbProduct oldEbProduct : set) {
            //判断set中是否存在新加入购物车的商品
            if (newProduct.getEpId().equals(oldEbProduct.getEpId())) {//集合中存在
                oldEbProduct.setCount(oldEbProduct.getCount() + 1);
                flag = true;
                break;
            }
        }
        //4.2将新添加的商品加入set集合
        if (!flag) {
            set.add(newProduct);//必须实体类重写hashcode方法和equals方法
        }
        //5.TODO 将集合放到购物车
        session.setAttribute("car", set);
    }
}
